Symbolic execution - model equivalence & applications

نویسندگان

  • Matei Popovici
  • Radu Stoenescu
  • Lorina Negreanu
  • Costin Raiciu
چکیده

Symbolic execution runs programs with symbolic inputs instead of concrete ones. A symbolic input models a range of values, which may be constrained or modified during program execution. The output of symbolic execution is the set of all possible program execution paths, and for each path and variable v — the symbolic expression to which v is bound, i.e. the set of constraints on v on the path at hand. Consider an example where the integer a is declared symbolic, meaning it can take any integer value, and a program that executes if (a>0): the execution engine will explore two paths after the instruction, one where the constraint a>0 holds, and one where its negation a<=0 holds. Symbolic execution has been recently used to verify network dataplanes [1, 3, 2]. When applied to the dataplane code (e.g. middlebox C code), it can capture a series of interesting bugs including low level memory access errors [1], but it does not scale very well, with verification times in the order of minutes to hours per box. Thus, all symbolic execution papers including [1, 3, 2] use models of the code instead of real code to perform symbolic execution in reasonable time; these models work at various abstraction levels and are coded in domain-specific languages (e.g. SEFL [3]) or in C code. By optimizing models for fast symbolic execution, it is possible to test fairly large networks in tens of seconds [3, 2]. There is one downside: existing works offer no strong guarantees that the model is a faithful representation of the real code. We present a possible solution to this problem.

برای دانلود رایگان متن کامل این مقاله و بیش از 32 میلیون مقاله دیگر ابتدا ثبت نام کنید

ثبت نام

اگر عضو سایت هستید لطفا وارد حساب کاربری خود شوید

منابع مشابه

FAuST: A Framework for Formal Verification, Automated Debugging, and Software Test Generation

We present FAuST, an extensible framework for Formal verification, Automated debugging, and Software Test generation. Our framework uses a highly customizeable Bounded Model Checking (BMC) algorithm for formal reasoning about software programs and provides different applications, e.g., property checking, functional equivalence checking, test case generation, and fault localization. FAuST suppor...

متن کامل

Symbolic Execution for Sequential and Multi-Process Programs with Unbounded Loops

Symbolic execution is a powerful technique for automatically verifying properties of programs. Symbolic techniques have been developed for a variety of classes of assertions, to verify parallel as well as sequential programs, and even to verify functional equivalence of two programs. However, one limitation of these applications is that they typically require that constant (often small) bounds ...

متن کامل

Early Cutpoint Insertion for High-Level Software vs. RTL Formal Combinational Equivalence Verification

Ever-growing complexity is forcing design to move above RTL. For example, golden functional models are being written as clearly as possible in software and not optimized or intended for synthesis. Thus, equivalence verification between the high-level software functional model and the RTL is needed. The typical approach is to convert the high-level software into RTL or gate-level hardware, via s...

متن کامل

Dynamic Symbolic Execution for Testing Distributed Objects

This paper extends dynamic symbolic execution to distributed and concurrent systems. Dynamic symbolic execution can be used in software testing to systematically identify equivalence classes of input values and has been shown to scale well to large systems. Although mainly applied to sequential programs, this scalability makes it interesting to consider the technique in the distributed and conc...

متن کامل

Symbolic Testing of OpenCL Code

We present an effective technique for crosschecking a C or C++ program against an accelerated OpenCL version, as well as a technique for detecting data races in OpenCL programs. Our techniques are implemented in KLEE-CL, a symbolic execution engine based on KLEE and KLEE-FP that supports symbolic reasoning on the equivalence between symbolic values. Our approach is to symbolically model the Ope...

متن کامل

ذخیره در منابع من


  با ذخیره ی این منبع در منابع من، دسترسی به آن را برای استفاده های بعدی آسان تر کنید

عنوان ژورنال:

دوره   شماره 

صفحات  -

تاریخ انتشار 2016